<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>高阶函数_函数柯里化</title>
</head>
<body>
  <!--准备好一个 div-->
  <div id="test"></div>
  <!--引入 react核心库-->
  <script type="text/javascript" src="../js/16.8.4/react.development.js"></script>
  <!--引入 react-dom 用于支持 react 操作 DOM-->
  <script type="text/javascript" src="../js/16.8.4/react-dom.development.js"></script>
  <!--引入 babel 用于将 jsx 转为 js-->
  <script type="text/javascript" src="../js/16.8.4/babel.min.js"></script>

  <script type="text/babel">
    /**
     * 高阶函数：如果一个函数符合下面2个规范中的任何一个，那么该函数是高阶函数
     * 1.若A函数，接收的参数是一个函数，那么A就可以称之为高阶函数
     * 2.若A函数，调用的返回值依然是一个函数，那么A就是可以称之为高阶函数
     * 常见的高阶函数有：Promise、setTimeout、arr.map()
     *
     *
     * 函数的柯里化：通过函数调用继续返回函数的方式，实现多次接收参数最后统一处理的函数编码方式
     */
    // 创建组件
    class Login extends React.Component{
      // 初始化状态
      state = {
        username:'',
        password:''
      }

      // 保存表单数据到状态
      saveFormData = (dataType)=>{
        return (event)=>{
          this.setState({[dataType]:event.target.value})
        }
      }


      // 表单提交的回调
      handleSubmit =(event)=>{
        event.preventDefault() // 阻止提交表单
        const {username,password} = this.state
        alert(`你输入的用户名是${username},你输入的密码是${password}`)
      }

      render() {
        return (
            <form action="Http://www.bilibili.com" onSubmit={this.handleSubmit}>
              用户名：<input onChange={this.saveFormData('username')} type="text" name="username"/>
              密码：<input onChange={this.saveFormData('password')} type="password" name="password"/>
              <button>登录</button>

            </form>
        )
      }
    }
    // 渲染组件
    ReactDOM.render(<Login/>,document.getElementById('test'))
  </script>
</body>
</html>
